1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.reflect;
18
19 import com.google.common.testing.EqualsTester;
20 import com.google.common.testing.NullPointerTester;
21
22 import junit.framework.TestCase;
23
24 import java.lang.annotation.Retention;
25 import java.lang.annotation.RetentionPolicy;
26 import java.lang.reflect.Constructor;
27
28
29
30
31
32
33 public class ElementTest extends TestCase {
34
35 public void testPrivateField() throws Exception {
36 Element element = A.field("privateField");
37 assertTrue(element.isPrivate());
38 assertFalse(element.isAbstract());
39 assertFalse(element.isPackagePrivate());
40 assertFalse(element.isProtected());
41 assertFalse(element.isPublic());
42 assertFalse(element.isFinal());
43 assertFalse(element.isStatic());
44 assertTrue(element.isAnnotationPresent(Tested.class));
45 }
46
47 public void testPackagePrivateField() throws Exception {
48 Element element = A.field("packagePrivateField");
49 assertFalse(element.isPrivate());
50 assertTrue(element.isPackagePrivate());
51 assertFalse(element.isProtected());
52 assertFalse(element.isPublic());
53 assertFalse(element.isFinal());
54 assertFalse(element.isStatic());
55 assertTrue(element.isAnnotationPresent(Tested.class));
56 }
57
58 public void testProtectedField() throws Exception {
59 Element element = A.field("protectedField");
60 assertFalse(element.isPrivate());
61 assertFalse(element.isPackagePrivate());
62 assertTrue(element.isProtected());
63 assertFalse(element.isPublic());
64 assertFalse(element.isFinal());
65 assertFalse(element.isStatic());
66 assertTrue(element.isAnnotationPresent(Tested.class));
67 }
68
69 public void testPublicField() throws Exception {
70 Element element = A.field("publicField");
71 assertFalse(element.isPrivate());
72 assertFalse(element.isPackagePrivate());
73 assertFalse(element.isProtected());
74 assertTrue(element.isPublic());
75 assertFalse(element.isFinal());
76 assertFalse(element.isStatic());
77 assertTrue(element.isAnnotationPresent(Tested.class));
78 }
79
80 public void testFinalField() throws Exception {
81 Element element = A.field("finalField");
82 assertTrue(element.isFinal());
83 assertFalse(element.isStatic());
84 assertTrue(element.isAnnotationPresent(Tested.class));
85 }
86
87 public void testStaticField() throws Exception {
88 Element element = A.field("staticField");
89 assertTrue(element.isStatic());
90 assertTrue(element.isAnnotationPresent(Tested.class));
91 }
92
93 public void testVolatileField() throws Exception {
94 Element element = A.field("volatileField");
95 assertTrue(element.isVolatile());
96 }
97
98 public void testTransientField() throws Exception {
99 Element element = A.field("transientField");
100 assertTrue(element.isTransient());
101 }
102
103 public void testConstructor() throws Exception {
104 Element element = A.constructor();
105 assertTrue(element.isPublic());
106 assertFalse(element.isPackagePrivate());
107 assertFalse(element.isAbstract());
108 assertFalse(element.isStatic());
109 assertTrue(element.isAnnotationPresent(Tested.class));
110 }
111
112 public void testAbstractMethod() throws Exception {
113 Element element = A.method("abstractMethod");
114 assertTrue(element.isPackagePrivate());
115 assertTrue(element.isAbstract());
116 assertFalse(element.isFinal());
117 assertTrue(element.isAnnotationPresent(Tested.class));
118 }
119
120 public void testOverridableMethod() throws Exception {
121 Element element = A.method("overridableMethod");
122 assertTrue(element.isPackagePrivate());
123 assertFalse(element.isAbstract());
124 assertFalse(element.isFinal());
125 assertTrue(element.isAnnotationPresent(Tested.class));
126 }
127
128 public void testPrivateMethod() throws Exception {
129 Element element = A.method("privateMethod");
130 assertFalse(element.isAbstract());
131 assertTrue(element.isPrivate());
132 assertFalse(element.isPackagePrivate());
133 assertFalse(element.isPublic());
134 assertFalse(element.isProtected());
135 assertTrue(element.isAnnotationPresent(Tested.class));
136 }
137
138 public void testProtectedMethod() throws Exception {
139 Element element = A.method("protectedMethod");
140 assertFalse(element.isAbstract());
141 assertFalse(element.isPrivate());
142 assertFalse(element.isPackagePrivate());
143 assertFalse(element.isFinal());
144 assertFalse(element.isPublic());
145 assertTrue(element.isProtected());
146 assertTrue(element.isAnnotationPresent(Tested.class));
147 }
148
149 public void testFinalMethod() throws Exception {
150 Element element = A.method("publicFinalMethod");
151 assertFalse(element.isAbstract());
152 assertFalse(element.isPrivate());
153 assertTrue(element.isFinal());
154 assertTrue(element.isPublic());
155 assertTrue(element.isAnnotationPresent(Tested.class));
156 }
157
158 public void testNativeMethod() throws Exception {
159 Element element = A.method("nativeMethod");
160 assertTrue(element.isNative());
161 assertTrue(element.isPackagePrivate());
162 }
163
164 public void testSynchronizedMethod() throws Exception {
165 Element element = A.method("synchronizedMethod");
166 assertTrue(element.isSynchronized());
167 }
168
169 public void testUnannotatedMethod() throws Exception {
170 Element element = A.method("notAnnotatedMethod");
171 assertFalse(element.isAnnotationPresent(Tested.class));
172 }
173
174 public void testEquals() throws Exception {
175 new EqualsTester()
176 .addEqualityGroup(A.field("privateField"), A.field("privateField"))
177 .addEqualityGroup(A.field("publicField"))
178 .addEqualityGroup(A.constructor(), A.constructor())
179 .addEqualityGroup(A.method("privateMethod"), A.method("privateMethod"))
180 .addEqualityGroup(A.method("publicFinalMethod"))
181 .testEquals();
182 }
183
184 public void testNulls() {
185 new NullPointerTester()
186 .testAllPublicStaticMethods(Element.class);
187 }
188
189 @Retention(RetentionPolicy.RUNTIME)
190 private @interface Tested {}
191
192 private static abstract class A {
193 @Tested private boolean privateField;
194 @Tested int packagePrivateField;
195 @Tested protected int protectedField;
196 @Tested public String publicField;
197 @Tested private static Iterable<String> staticField;
198 @Tested private final Object finalField;
199 private volatile char volatileField;
200 private transient long transientField;
201
202 @Tested public A(Object finalField) {
203 this.finalField = finalField;
204 }
205
206 @Tested abstract void abstractMethod();
207
208 @Tested void overridableMethod() {}
209
210 @Tested protected void protectedMethod() {}
211
212 @Tested private void privateMethod() {}
213
214 @Tested public final void publicFinalMethod() {}
215
216 void notAnnotatedMethod() {}
217
218 static Element field(String name) throws Exception {
219 Element element = new Element(A.class.getDeclaredField(name));
220 assertEquals(name, element.getName());
221 assertEquals(A.class, element.getDeclaringClass());
222 return element;
223 }
224
225 static Element constructor() throws Exception {
226 Constructor<?> constructor = A.class.getDeclaredConstructor(Object.class);
227 Element element = new Element(constructor);
228 assertEquals(constructor.getName(), element.getName());
229 assertEquals(A.class, element.getDeclaringClass());
230 return element;
231 }
232
233 static Element method(String name, Class<?>... parameterTypes) throws Exception {
234 Element element = new Element(A.class.getDeclaredMethod(name, parameterTypes));
235 assertEquals(name, element.getName());
236 assertEquals(A.class, element.getDeclaringClass());
237 return element;
238 }
239
240 native void nativeMethod();
241
242 synchronized void synchronizedMethod() {}
243 }
244 }